home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / nihcl-30.lha / nihcl-3.0 / ex / ex13-5.c < prev    next >
C/C++ Source or Header  |  1990-05-15  |  809b  |  45 lines

  1. // ex13-5.c -- Virtual base classes and virtual functions
  2.  
  3. // $Header: /afs/alw.nih.gov/unix/sun4_40c/usr/local/src/nihcl-3.0/share/ex/RCS/ex13-5.c,v 3.0 90/05/15 22:44:43 kgorlen Rel $
  4.  
  5. #include <iostream.h>
  6.  
  7. class V {
  8. public:
  9.     virtual void vf();
  10. };
  11.  
  12. void V::vf()    { cout << "V::vf()" << endl; }
  13.  
  14. class A: public virtual V {
  15. public:
  16.     virtual void vf();
  17. };
  18.  
  19. void A::vf()    { cout << "A::vf()" << endl; }
  20.  
  21. class B: public virtual V {
  22. public:
  23.     void fb()   { vf(); }
  24. };
  25.  
  26. class C: public A, public B {
  27. };
  28.  
  29. class D: public A, public B {
  30. public:
  31.     virtual void vf();
  32. };
  33.  
  34. void D::vf()    { cout << "D::vf()" << endl; }
  35.  
  36. main()
  37. {
  38.     B b;
  39.     b.fb();  // B::fb() calls V::vf()
  40.     C c;
  41.     c.fb();  // B::fb() calls A::vf() -- on another path of the DAG
  42.     D d;
  43.     d.fb();  // B::fb() calls D::vf()
  44. }
  45.